package basic.arch.component.lock.aop.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Lock {

    /**
     * 锁的业务名称
     * 
     * @return
     */
    String name();

    /**
     * 当前锁的key
     */
    String key() default "";

    /**
     * 当前本地锁时间最大等待时间
     * @return
     */
    int localLockMaxWaitTime() default 0;
    
    /**
     * 当前分布式锁时间最大等待时间
     * @return
     */
    int distributeLockMaxWaitTime() default 0;

    /**
     * 重试次数
     * @return
     */
    int tryTimes() default 0;

    /**
     * 分布式锁的实现类型 
     * @return
     */
    DisstributionLockType disstributionLockType() default DisstributionLockType.REDIS;

    public enum DisstributionLockType {
        REDIS,MYSQL,ZOOKEEPER
    }
}
